<?php



class Pedido
{
	var $itens;
	var $pagamento;
	var $cliente;
	var $total;
	var $custoTotalEmbrulho;
	var $frete;
	var $valePresente;
	var $valorValePresente;
	var $enderecoEntrega;
	var $CEP;
	var $numeroPedido;
	var $nomeEntrega;
	
	function Pedido() {
		$this->itens 	= array();
	}
	
	function calculaParcelas() {
		$total 					= $this->getTotal();
		$possiveisParcelas		= array();
		$parcelaMinima			= 10.0;
		
		$possiveisParcelas[1] 	= $total;
		
		for ($i = 2; $i <= 12; $i++) {
			if (($total / $i) > $parcelaMinima) {
				$possiveisParcelas[$i]	= ceil(($total/$i)*100)/100;
			}
		}
		
		return $possiveisParcelas;
	}
	
	function adicionaItem($item) {
		$this->itens[$item->getProduto()->getId()]	= $item;
	}
	
	function removeItem($idItem) {
		unset($this->itens[$idItem]);
		$this->calculaFrete();
	}
	
	function getItem($idItem) {
		return $this->itens[$idItem];
	}
	
	public function getCustoTotalEmbrulho() {
		return $this->custoTotalEmbrulho;
	}
	
	public function calculaCustoTotalEmbrulho() {
		$custo = 0;
		
		foreach($this->getItens() as $item) {
			$item->calculaCustoEmbrulho($item->getTipoEmbrulho());
			$custo += $item->getCustoEmbrulho();
		}
		$this->custoTotalEmbrulho	= $custo;
		$this->calculaTotal();
	}
	
	
    /**
     * Returns $cliente.
     * @see Pedido::$cliente
     */
    public function getCliente()
    {
        return $this->cliente;
    }
    
    /**
     * Sets $cliente.
     * @param object $cliente
     * @see Pedido::$cliente
     */
    public function setCliente($cliente)
    {
        $this->cliente = $cliente;
		if ($cliente->getId() != null) {
			$this->setNomeEntrega($cliente->getNome());
			$this->setEnderecoEntrega($cliente->getEndereco());
			$this->setCEP($cliente->getCEP());
		}
    }
    
    /**
     * Returns $enderecoEntrega.
     * @see Pedido::$enderecoEntrega
     */
    public function getEnderecoEntrega()
    {
        return $this->enderecoEntrega;
    }
    
    /**
     * Sets $enderecoEntrega.
     * @param object $enderecoEntrega
     * @see Pedido::$enderecoEntrega
     */
    public function setEnderecoEntrega($enderecoEntrega)
    {
        $this->enderecoEntrega = $enderecoEntrega;
    }
    
    /**
     * Returns $frete.
     * @see Pedido::$frete
     */
    public function getFrete()
    {
        return $this->frete;
    }
    
    /**
     * Sets $frete.
     * @param object $frete
     * @see Pedido::$frete
     */
    public function calculaFrete()
    {
    	if ($this->getCEP() != '' || $this->getCEP() != null){
	    	$numeroItens = 0;
			
			foreach ($this->getItens() as $item) {
				$numeroItens += $item->getQuantidade();
			}
			
	        $this->frete = ((($this->getCEP()/10000)%100) * 1.5 * ($numeroItens))/29;
		}
		else {
			$this->frete = 0;
		}
		
		$this->calculaTotal();
    }
    
    /**
     * Returns $numeroPedido.
     * @see Pedido::$numeroPedido
     */
    public function getNumeroPedido()
    {
        return $this->numeroPedido;
    }
    
    /**
     * Sets $numeroPedido.
     * @param object $numeroPedido
     * @see Pedido::$numeroPedido
     */
    public function setNumeroPedido($numeroPedido)
    {
        $this->numeroPedido = $numeroPedido;
    }
    
    /**
     * Returns $pagamento.
     * @see Pedido::$pagamento
     */
    public function getPagamento()
    {
        return $this->pagamento;
    }
    
    /**
     * Sets $pagamento.
     * @param object $pagamento
     * @see Pedido::$pagamento
     */
    public function setPagamento($pagamento)
    {
        $this->pagamento = $pagamento;
    }
    
    /**
     * Returns $total.
     * @see Pedido::$total
     */
    public function getTotal()
    {
        return $this->total;
    }
    
    /**
     * Sets $total.
     * @param object $total
     * @see Pedido::$total
     */
    public function calculaTotal()
    {
    	$valorItens	= 0;
		
		foreach ($this->getItens() as $item) {
			$valorItens += $item->getTotal();
		}
		
		$valorParcial = $valorItens + $this->getFrete() + $this->getCustoTotalEmbrulho();
		
        $this->total = $this->getFrete() + $valorItens - $this->getValorValePresente() + $this->getCustoTotalEmbrulho();
		
		if($valorParcial < 10 && $this->getValePresente()){
			$this->total = $valorParcial;
			$_SESSION['mensagens']['erroCarrinho']	= "A 5Store n&atilde;o realiza compras com Vale Presentes para valores menores que R$ 10,00.";
		}
		elseif($this->total < 10 && $this->getValePresente()){
			$this->total	=	10;
			$_SESSION['mensagens']['erroCarrinho']	= "O valor m&iacute;nimo de uma compra que utilize Vale-Presente deve ser R$ 10,00.";
		}
		
    }
    
    /**
     * Returns $valePresente.
     * @see Pedido::$valePresente
     */
    public function getValePresente()
    {
        return $this->valePresente;
    }
    
    /**
     * Sets $valePresente.
     * @param object $valePresente
     * @see Pedido::$valePresente
     */
    public function setValePresente($valePresente)
    {
        $this->valePresente = $valePresente;
		$this->calculaValorValePresente();
		return	$this->getValorValePresente();
    }

    /**
     * Returns $CEP.
     * @see Pedido::$CEP
     */
    public function getCEP()
    {
        return $this->CEP;
    }
    
    /**
     * Sets $CEP.
     * @param object $CEP
     * @see Pedido::$CEP
     */
    public function setCEP($CEP)
    {
        $this->CEP = $CEP;
		$this->calculaFrete();
		
		foreach ($this->getItens() as $item) {
			$item->calculaPrazoEntrega($CEP);
		}
    }

    /**
     * Returns $itens.
     * @see Pedido::$itens
     */
    public function getItens()
    {
        return $this->itens;
    }

    /**
     * Returns $valorValePresente.
     * @see Pedido::$valorValePresente
     */
    public function getValorValePresente()
    {
        return $this->valorValePresente;
    }
    
    /**
     * Sets $valorValePresente.
     * @param object $valorValePresente
     * @see Pedido::$valorValePresente
     */
    public function calculaValorValePresente()
    {
        if ($this->getValePresente()) {
        	$strQuery	= "SELECT * FROM valepresentes WHERE codigo='" . $this->getValePresente() . "';";
			
			$connection	= Modelo::conectaBD();
			$resultSet	= Modelo::query($strQuery, $connection);
			Modelo::desconectaBD($connection);
			
			if ($resultado = mysql_fetch_array($resultSet)) {
				$this->valorValePresente	= $resultado['desconto'];
			}
			else {
				$this->setValePresente(null);
			}
			
        }
		else {
			$this->valorValePresente	= 0.0;
		}
    }
	
	public function finalizaCompra() {
		$this->calculaCustoTotalEmbrulho();
		$this->calculaFrete();

		$efetuado 		= "false";
		
		if ($this->getPagamento()->getEfetuado()) {
			$efetuado 	= "true";
		}
		
		$numeroPedido1 	= rand(1000000000, 9999999999);
		$numeroPedido2 	= rand(1000000000, 9999999999);
		$numeroPedido 	= $numeroPedido1 . $numeroPedido2;
		
		$connection	= Modelo::conectaBD();
		
		$strQuery 	= "SELECT numeroPedido FROM pedidos WHERE numeroPedido='" . $numeroPedido . "';";
		$resultSet	= Modelo::query($strQuery, $connection);
		
		while ($resultado = mysql_fetch_array($resultSet)) {
			$numeroPedido1 	= rand(1000000000, 9999999999);
			$numeroPedido2 	= rand(1000000000, 9999999999);
			$numeroPedido 	= $numeroPedido1 . $numeroPedido2;
			$strQuery 	= "SELECT numeroPedido FROM pedidos WHERE numeroPedido='" . $numeroPedido . "';";
			$resultSet	= Modelo::query($strQuery, $connection);
		}
		
		$this->setNumeroPedido($numeroPedido);
		
		$strQuery 	= "INSERT INTO pedidos VALUES(default, " . $this->getCliente()->getId() . ", " . number_format($this->getTotal(), 2, ".", "") . ", " . number_format($this->getFrete(), 2, ".", "") . ", '" . $this->getValePresente() . "', '" . $this->getNomeEntrega() . " - " . $this->getEnderecoEntrega() . " - CEP: " . substr($this->getCEP(), 0, 5) . "-" . substr($this->getCEP(), 5, 3) . "', '" . $this->getNumeroPedido() . "', DATE(NOW()), " . $efetuado . ");";
		Modelo::query($strQuery, $connection);
		
		$strQuery 	= "SELECT idPedido FROM pedidos WHERE numeroPedido='" . $this->getNumeroPedido() . "';";
		$resultSet	= Modelo::query($strQuery, $connection);
		if ($resultado = mysql_fetch_array($resultSet)) {
			$idPedido 	= $resultado['idPedido'];
			
			foreach ($this->getItens() as $item) {
				$entregue	= "false";
				if ($item->getEntregue()) {
					$entregue 	= "true";
				}
				
				$strQuery 	= "INSERT INTO itensPedido VALUES(" . $idPedido .", " . $item->getProduto()->getId() . ", " . $item->getQuantidade() . ", " . number_format($item->getTotal(), 2, ".", "") . ", '" . $item->getTipoEmbrulho() . "', " . number_format($item->getCustoEmbrulho(), 2, ".", "") . ", '" . $item->getMensagemCartao() . "', " . $item->getPrazoEntrega() . ", " . $entregue . ");";
				Modelo::query($strQuery, $connection);
				
				$item->getProduto()->atualizaEstoque($item->getQuantidade());
			}
			
			$connection	= Modelo::conectaBD();
			
			$strFormaPagamento 	= $this->getPagamento()->getStrFormaPagamento();

			if ($strFormaPagamento == "boleto") {
				$strQuery 	= "INSERT INTO boletos VALUES(" . $idPedido . ", '" . $this->getPagamento()->getFormaPagamento()->getNumero() . "', '" . $this->getPagamento()->getFormaPagamento()->getPrazo() . "');";
				Modelo::query($strQuery, $connection);
			}
			
			if ($strFormaPagamento == "debito") {
				$strQuery 	= "INSERT INTO debitosonline VALUES(" . $idPedido . ", " . $this->getPagamento()->getFormaPagamento()->getBanco() . ", " . $this->getPagamento()->getFormaPagamento()->getProcesso() . ");";
				Modelo::query($strQuery, $connection);
			}
			
			if ($strFormaPagamento == "cartao") {
				$strQuery 	= "INSERT INTO cartoes VALUES(" . $idPedido . ", " . $this->getPagamento()->getFormaPagamento()->getBandeira() . ", " . $this->getPagamento()->getNumeroParcelas() . ");";
				Modelo::query($strQuery, $connection);
			}
			
			Modelo::desconectaBD($connection);
			return true;
		}
		else {
			Modelo::desconectaBD($connection);
			return false;
		}
	}

    /**
     * Returns $nomeEntrega.
     * @see Pedido::$nomeEntrega
     */
    public function getNomeEntrega()
    {
        return $this->nomeEntrega;
    }
    
    /**
     * Sets $nomeEntrega.
     * @param object $nomeEntrega
     * @see Pedido::$nomeEntrega
     */
    public function setNomeEntrega($nomeEntrega)
    {
        $this->nomeEntrega = $nomeEntrega;
    }

}

?>